package com.guodi.model.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.guodi.model.entity.ApiIndicatorsGrowthRate;
import com.guodi.model.entity.ApiMapDivision;
import com.guodi.model.entity.IdtMonitorValue;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * @描述：指标监测值表 Mapper 接口
 * @作者: 彭辉
 * @日期: 2020-06-05
 */
public interface IdtMonitorValueMapper extends BaseMapper<IdtMonitorValue> {

    /**
     * @描述:根据关键字搜索
     * @入参:
     * @出参:
     * @作者: 戴伙进
     * @日期: 2020/6/17 12:09
     **/
    List<IdtMonitorValue> listByKeyWord(@Param("keyWord") String keyWord, @Param("year") Integer year, @Param("pageSize") long pageSize, @Param("start") long start, @Param("sort") String sort, @Param("sortWay") String sortWay, @Param("divisionCode") String divisionCode, @Param("orgId") String orgId);

    /**
     * @描述:关键字搜索查询的总记录数
     * @入参:
     * @出参:
     * @作者: 戴伙进
     * @日期: 2020/6/17 15:08
    **/
    Integer listByKeyWordCount(@Param("keyWord") String keyWord, @Param("orgId") String orgId);

    /**
     * @描述:关键字、行政区划搜索查询的总记录数
     * @入参:
     * @出参:
     * @作者: 汤厚韬
     * @日期: 2020/12/22 16:08
     **/
    Integer listByKeyWordAndCodeCount(@Param("keyWord") String keyWord, @Param("year") Integer year, @Param("divisionCode") String divisionCode, @Param("orgId") String orgId);

    /**
     * @描述:通过行政编码获取行政区名称
     * @入参:
     * @出参:
     * @作者: 戴伙进
     * @日期: 2020/6/18 15:42
    **/
    String getNameByDivisionCode(String divisionCode);

    /**
    * @描述: 获取各行政区划的指标监测值
    * @入参:
    * @出参:
    * @作者: 代鹏刚
    * @日期: 2020/10/21 17:01
    **/
    List<IdtMonitorValue> getHistoryList(@Param("indicatorsId") String indicatorsId, @Param("monitorTimeList") List<String> monitorTimeList, @Param("divisionCode") String divisionCode);

    /**
     * @描述: 根据父级地区编码，查询其直接子级
     * @入参: parentDivisionCode 父级行政区编码
     * @出参: 直接子级
     * @作者: 陈宏成
     * @日期: 2021/01/14
     **/
    List<ApiMapDivision> listDirectChildDivision(String parentDivisionCode);

    /**
     * @描述：根据指标编码、年份、行政区划代码查询因子值
     * @作者：汤厚韬
     * @日期：2021/1/25
     */
    List<IdtMonitorValue> listByIndicatorsIds(@Param("calculateFactorNameList") List<String> calculateFactorNameList, @Param("year") String year, @Param("divisionCode") String divisionCode);

    /**
     * @作者: 林楷 2021/4/27
     * @描述: 计算指标监测值年均增速
     * @参数: indicatorsId：指标模型ID
     * @参数: divisionCode：行政区划编号
     * @返回:
     */
    List<ApiIndicatorsGrowthRate> computeYearGrowthRateByIndicatorsAndDivision(String indicatorsId, String divisionCode);

    /**
     * @作者: 陈宏成  2021-08-04
     * @描述:   计算上一监测值，根据更新周期，如果是年度更新，就查指标监测值里面monitor_time为年度的上一条监测值，
     *         如果上一年没有，则往前继续追溯。如果是月度更新，就查指标监测值里面monitor_time为月度的上一条监测值
     * @参数: indicatorsId：指标模型ID
     * @参数: divisionCode：行政区划编号
     * @参数: currentUpdateTime：当前更新时间，会查询比这个更新时间更早的上次更新的记录，格式: yyyy 或者 yyyy-MM
     * @参数: updateCycle: 更新周期，1-年度，2-月度，3-季度
     * @返回:
     */
    IdtMonitorValue getLastMonitorValue(@Param("indicatorsId") String indicatorsId, @Param("divisionCode") String divisionCode
            , @Param("currentUpdateTime") String currentUpdateTime, @Param("updateCycle") String updateCycle);

    /**
     * 计算监测值的平均值
     * @入参： idtIdList 指标id列表
     * @入参： divisionCode 行政区划编码列表
     * @入参： updateCycle 更新周期， year、month、quarter 。只能是这三个值
     * @出参： List<IdtMonitorValue> 只会有三个值indicators_id, division_code, monitor_value。其中monitor_value为平均值
     * @作者： 陈宏成
     * @日期： 2021/11/9
     */
    List<IdtMonitorValue> listAvgMonitorValue(@Param("idtIdList") List<String> idtIdList, @Param("divisionCodeList") List<String> divisionCodeList
            , @Param("updateCycle") String updateCycle);
}
